import axios from 'axios'
import { useUserStore } from '@/stores/user'
import { ElMessage } from 'element-plus'
import router from '@/router'
// 创建axios实例
const request = axios.create({
  // 配置请求的基础路径
  baseURL: import.meta.env.VITE_APP_BASE_API + '/admin',
  timeout: 10000 // 请求超时时间 10s
})

// axios请求拦截器 每次请求携带token
request.interceptors.request.use(config => {
  const userStore = useUserStore(); // 获取用户store对象

  // 添加token头部，如果userInfo中有token则使用userInfo.token，否则使用viewToken
  if (userStore.userInfo.token) {
    config.headers['token'] = userStore.userInfo.token;
  } else if (userStore.viewToken) {
    config.headers['token'] = userStore.viewToken;
  }

  // 返回修改后的配置信息
  return config;
}, e => Promise.reject(e));

request.interceptors.response.use(res => {
  // 判断是否返回了Blob对象
  if (res.data instanceof Blob) return res; // 返回了Blob对象

  // 确保响应数据格式正确
  if (res.data && res.data.code === 1) {
    // 返回解构后的数据
    return res.data;
  } else {
    // 提示错误返回的消息
    const msg = res.data && res.data.msg ? res.data.msg : '请求失败';
    ElMessage.error(msg);
    return Promise.reject(msg);
  }
}, e => {
  // 处理401错误
  if (e.response && e.response.status === 401) {
    ElMessage.warning('登录失效');
    // 清除过期的token
    useUserStore().clear();
    router.push('/login');
  } else {
    // 提示错误信息
    const errorMsg = e.response ? e.response.data.msg || e.message : e.message;
    ElMessage.warning(errorMsg);
  }
  return Promise.reject(e);
});


// axios响应拦截器
export default request;